/**
 * @package 整数反转
 * @description 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
 * @author liu <admin>
 */
export const title = '整数反转'

const max = Math.pow(2, 31)

/**
 * 暴力解法
 * @param {number} x
 * @returns {number}
 */
export function reverse(x: number): number {
  if (x === 0) return 0
  const num = Number(Math.abs(~~x).toString().split('').reverse().join(''))
  if (num >= max) return 0
  if (x < 0) return -num
  return num
}

/**
 * 截尾解法
 * @param {number} x
 * @returns {number}
 */
export function reverseTow(x: number): number {
  let num = 0
  while (x !== 0) {
    num = num * 10 + (x % 10)
    if (num < -max || num >= max) return 0
    x = ~~(x / 10)
  }
  return num
}
